class: inverse,left, middle background-image: url(background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 3: Percepción remota, análisis masivo y Google Earth Engine. ### Clasificación supervisada con Google earth engine. Gabriel Castro gabriel.castro.b@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Diciembre 2023</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ### Contenidos. .pull-left[ <b>1) ¿Qué es una clasificación supervisada? </b> + a) Definición. + b) Comparación no supervisada. (Pros y contras) + c) Ejemplos de clasificaciones supervisadas. <b>2) c) Paso a paso de una clasificación.</b> + a) Imágenes satelitales. + b) Clases de uso de suelo. + c) Información auxiliar. + d) Validación de resultados. <b>3) Puntos de entrenamiento y validación.</b> + a) Consideraciones de la fotointerpretación. ] --- ### Contenidos. .pull-left[ <b>4) Preparar las imágenes para la clasificación.</b> + a) filtros calidad de la información. + b) Variables auxiliares. + c) Normalización de la información. <b>5) Métodos de clasificación disponibles en GEE.</b> + a) Supor vector machine. + b) Random Forest. <b>6) Análisis de los resultados.</b> + a) Precisión general – índice Kappa + b) Errores de omisión y comisión por clase. ] --- ### ¿Qué es una clasificación supervisada? - Una clasificación supervisada se basa en la idea de que un usuario puede seleccionar píxeles de muestra en una imagen que son representativos de clases específicas y luego dirigir el software de procesamiento de imágenes para usar estos sitios de capacitación como referencias para la clasificación de todos los demás píxeles en la imagen. - La clasificación supervisada permite clasificar capas rasters a partir de la informacion contenida en diferentes pixeles. Es necesario tener conocimiento previo de las clases del área de estudio (uso actual del suelo). Se debe marcar puntos y asignar un valor numérico para cada clase. (ESRI, 2012) - Una clasificación supervisada en percepción remota permite la conversión de multiples inputs de capas rasters a grupos de pixeles con caracteristicas similares. (Wegmann, Leutner, 2016) - Transformación de la información contenida en la grilla de tipo **continua** a información **discreta** asociada a una categoría de uso de suelo. --- <center> <img src="data:image/png;base64,#esquema_CS.png" width="1200px" HEIGHT = "600px"/> <center> --- <center> <img src="data:image/png;base64,#ONU_2030_2.JPG" width="1000px" HEIGHT = "620px"/> <center> --- <center> <img src="data:image/png;base64,#gif_cambios_suelo.gif" width="800px" HEIGHT = "620px"/> <center> --- ### Ejemplos Landcovers. #### ESA Worldcover: 2020. - Producto de cobertura terrestre global de referencia con una resolución de 10 m para 2020. - Generación rápida y validación de una cobertura terrestre mundial basada en las constelaciones Sentinel-2 y Sentinel-1. - Cuenta con 10 clases de cobertura terestre. - 75% de precisión general para todo el mundo. - El producto ESA WorldCover ha sido validado de forma independiente por la Universidad de Wageningen (precisión estadística) y el IIASA (precisión espacial). --- <center> <img src="data:image/png;base64,#ESA_WC_2.JPG" width="950px" HEIGHT = "570px"/> <center> #### link acceso: https://esa-worldcover.org/en --- ### Ejemplos Landcovers. #### Landcover Zhao 2014-2015 Chile. - Producto creado a partir de la coleccion Landsat 30 m - El esquema propuesto incluye 10 clases en el nivel 1, 30 clases en el nivel 2 y 35 clases en el nivel 3. - LULC Dinamico del año 2014-2015 (se utilizaron todas las imagenes Landsat disponibles durante este periodo de tiempo para todo Chile) - Mapa lvl 1 con 80% de precisión general --- <center> <img src="data:image/png;base64,#LULC_zhao_2.JPG" width="1000px" HEIGHT = "590px"/> <center> ##### link descarga y manual de uso: http://www.gep.uchile.cl/Landcover_CHILE.html --- ## Clasificación supervisada vs no supervisada. -- ### No supervisada. > Identifica clusters de pixeles espectralmente similares. > > Algoritmo no es entrenado por el usuario. > > Se puede o no, tener conocimiento del area de interes. -- ### Supervisada. > Utiliza muestras de entrenamiento y validación. > > Existe un conocimiento previo del area y las clases potenciales a clasificar. > > Algoritmo "aprende" o se "entrena" a partir de las muestras de entrenamiento de cada pixel para clasificar la imagen con los predictores. --- ### Paso a paso clasificación supervisada. + a) Imágenes satelitales. + b) Clases de uso de suelo. + c) Información auxiliar. + d) Validación de resultados. <center> <img src="data:image/png;base64,#classificacion.gif" width="1000px" HEIGHT = "300px"/> <center> ESA 2019 <center> <center> --- ### Paso a paso clasificación supervisada. #### a) Imágenes satelitales. <left> <img src="data:image/png;base64,#catalogo.PNG" width="1000px" HEIGHT = "480px"/> <left> --- ### Paso a paso clasificación supervisada. #### b) Clases de uso de suelo. - Definir las clases dentro de una clasificación es un paso necesario para obtener buenos resultados. - Es necesario que el profesional o investigador tenga conocimiento del territorio para separar de buena manera los elementos presentes en el. - Dependiendo del enfoque final, las clases pueden variar considerablemente de un trabajo a otro: Clasificar diferentes tipos de bosque (denso, semidenso, abierto, caducifolio), Usos agrícolas de temporada (arboles siempre verdes, frutales, viñedos, hortalizas), usos urbanos etc. - La separabilidad de las clases radica en su comportamiento espectral. Mientras más diferentes sean unas de otras, más fácil será la clasificación del territorio. --- <center> <img src="data:image/png;base64,#diapo_1.PNG" width="1200px" HEIGHT = "620px"/> <center> --- <center> <img src="data:image/png;base64,#diapo_2.PNG" width="1200px" HEIGHT = "620px"/> <center> --- <center> <img src="data:image/png;base64,#diapo_3.PNG" width="1200px" HEIGHT = "620px"/> <center> --- <center> <img src="data:image/png;base64,#diapo_4.PNG" width="1200px" HEIGHT = "620px"/> <center> --- ### Paso a paso clasificación supervisada. #### c) Información axuliar. - Comúnmente, una clasificación supervisada utiliza una imagen satelital como base del proceso. - Sin embargo, el uso de solo una imagen para captar un momento específico del territorio en ocasiones, no es suficiente para para captar toda la variabilidad temporal que puede estar presente en las clases seleccionadas. - De esta forma, es posible agregar información auxiliar a la clasificación para mejorar los resultados finales como: - **Composiciones multitemporales.** - **Índices espectrales.** - **Modelos de elevación digital. (orientación, pendiente, elevación)** - **Fenología.** - **Geología.** --- <center> <img src="data:image/png;base64,#mult.PNG" width="850px" HEIGHT = "620px"/> <center> --- ### Paso a paso clasificación supervisada. #### c) Validación de resultados. - Validar los resultados de la clasificación es imprescindible. Este paso final nos permite observar el desempeño de nuestro modelo a partir de la precisión general y observar cuales fueron las clases mejor o peor clasificadas. - Es necesario que las muestras de **validación** sean totalmente independientes de las muestras de **entrenamiento** para asegurar la correcta validación. - A partir de una **matriz de confusión** es posible comparar nuestra imagen clasificada (resultado del modelo) con la realidad del territorio (muestras de validación) --- - Una **matriz de confusión** presenta una visión general de las asignaciones, tanto de las clasificaciones correctas (elementos de la diagonal) como de las migraciones o fugas (elementos fuera de la diagonal) y permite recoge los denominados errores de omisión y de comisión por clase. <left> <img src="data:image/png;base64,#tabla_matriz.PNG" width="750px" HEIGHT = "500px"/> <left> --- ### Paso a paso clasificación supervisada. #### c) Validación de resultados. • <b>Matriz de confusión:</b> Corresponde a una matriz de 2 dimensiones donde podemos ver los resultados de la clasificación por clase. A partir de esta, podemos inferir todos los indicadores de una clasificación (precisión general, índice kappa, y errores de omisión y comisión). • <b>Precisión general:</b> Es el cociente entre la cantidad total de observaciones bien clasificadas (todos los valores de la diagonal de la matriz) y la cantidad total de observaciones. Se mueve entre 0-1 mientras que más cercano a 1 mayor será la precisión de la clasificación. • <b>índice Kappa:</b> Indica la aleatoriedad del proceso de clasificación, se mueve entre 0-1 donde los valores más cercanos a 1 indican que el proceso de clasificación es debido a la elección de las clases y puntos de entrenamiento y validación mientras que valores cercanos a 0 indican que el proceso es más cercano a lo aleatorio. --- ### Paso a paso clasificación supervisada. #### c) Validación de resultados. • <b>Precisión del productor:</b> Se obtiene a partir de las columnas (observado) de mi matriz correspondiente al cociente entre la cantidad bien clasificados con la cantidad total de observaciones, va de 0 a 100%. • <b>Error de omisión:</b> Es el resultado de 1 – precisión del productor. Indica cuando un punto o píxel es dejado fuera de una categoría especifica. • <b>Precisión del consumidor:</b> Se obtiene a partir de las filas (clasificado) de mi matriz correspondiente al cociente entre la cantidad bien clasificados con la cantidad total de observaciones, va de 0 a 100%. • <b>Error de comisión:</b> Es el resultado de 1 – precisión del consumidor. Indica cuando un punto o píxel se incluye de forma errónea en una categoría especifica. --- ### Puntos de entrenamiento y validación. #### a) Consideraciones de la fotointerpretación. - Se necesita de un buen muestreo para identificar las zonas o los pixeles más homogéneos por clase. - Evitar las muestras de "borde" que puedan estar influidas por otros usos o coberturas de suelo. - Tener una cantidad de muestras adecuadas (Esto depende de la cantidad de área que cubre mi clase, la cantidad de predictores que utilizare entre otros) - Buen número de muestras por clase oscila entre 30-50 muestras (muchas muestras de entrenamiento pueden llegar a confundir la clasificación del modelo) - Para el ejercicio práctico hemos definido 5 clases de cobertura y uso de suelo que veremos más adelante. --- ### Puntos de entrenamiento y validación. - Dentro de Google earth engine es posible generar **Feature.Collections** o geometrías espaciales con información contenida en su interior para generar mis muestras de entrenamiento y validación. - En caso de ser necesario, podemos foto interpretar nuestros puntos en otras plataformas GIS o visualizadores como Google earth y subirlas a la plataforma. - El proceso de fotointerpretación es bastante común a la hora de generar muestras de entrenamiento y validación, esto ya que conseguir muestras en terreno es bastante costoso en tiempo y recursos. --- ### Puntos de entrenamiento y validación. <center> <img src="data:image/png;base64,#geometrias_2.PNG" width="1000px" HEIGHT = "520px"/> <center> --- ### Puntos de entrenamiento y validación. <center> <img src="data:image/png;base64,#geometrias.PNG" width="1000px" HEIGHT = "400px"/> <center> --- ### Preparar las imágenes para la clasificación. - Para este ejemplo utilizaremos la coleccion sentinel 2 Harmonized disponible en GEE. ```java var geometry = AOI; Map.centerObject(geometry); Map.addLayer(geometry, {}, "shape area estudio") ``` - Seleccionaremos las bandas sentinel a 10 metros junto aquellas de control de calidad. ```java var inBands = ee.List(['B2','B3','B4','B8','MSK_CLDPRB','MSK_SNWPRB','SCL']) var outBands = ee.List(['blue','green','red','nir','MSK_CLDPRB','MSK_SNWPRB','SCL']); ``` ```java var s2_filtered = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED") .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30)) // porcentaje nubosidad inferior al 30% .filter(ee.Filter.date('2022-01-01', '2023-01-01')) // Filtro por fecha .filter(ee.Filter.bounds(geometry)) // Filtro por geometría .select(inBands, outBands) // seleccionar bandas de interes. print(s2_filtered, "sentinel 2A") ``` --- ### Preparar las imágenes para la clasificación. #### a) Filtros de calidad de la información. - Filtro por nubosidad **MSK_CLDPRB** y por objetos presentes en la imagen **SCL** para eliminar elementos como las nubes cirrus, sombras y nieve. ```java function maskCloudAndShadowsSR(image) { var cloudProb = image.select('MSK_CLDPRB'); var cloud = cloudProb.lt(10); var scl = image.select('SCL'); var shadow = scl.eq(3); // 3 = sombra de nube var cloudhigh = scl.eq(9); // 9 = alta probabilidad de nube var cirrus = scl.eq(10); // 10 = nubes cirrus var snowhigh = scl.eq(11); // 11 = nieve // Enmascarar pixeles con probabilidad de nube <10% y elementos presentes en los pixeles. var mask = cloud.and(cirrus.neq(1)).and(cloudhigh.neq(1)) .and(shadow.neq(1).and(snowhigh.neq(1))); return image.updateMask(mask) .copyProperties(image, ['system:time_start']); } var filtered = s2_filtered.map(maskCloudAndShadowsSR); ``` --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares. - Considerando que la cuenca media del Aconcagua está dominada en gran medida por los cultivos agrícolas, es complejo trabajar con tan solo una imagen estática para su clasificación. - Esto implicaría trabajar con zonas de cultivos que pueden tener un comportamiento estacional como los frutales o viñedos de la zona. - Además de esto, es necesario recalcar la importancia de la topografía en la zona. La orientación de las laderas juega un papel fundamental en la presciencia de ciertos tipos de vegetación como las cactáceas y zonas de bosques más densos. - Teniendo estas consideraciones necesitaremos una **Media de EVI** por estación, la **elevación, pendiente y orientación del terreno** para facilitar el trabajo de nuestro clasificador. --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares - Composiciones estacionales de EVI. ```java // Genrara composiciones de EVI para cada una de las estaciones del año ---- // Ene-Marz = Verano // Abril-June = Otoño // Julio-Septiembre = Invierno // Octubre-Diciembre = Primavera var cropCalendar = ee.List([[1,3], [4,6], [7,9], [10,12]]) // meses según calendario // Función para calcular el EVI en cada una de las imagenes de la colección. var addEVI = function(image) { var evi = image.expression( '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', { 'NIR': image.select('nir'), // Near-infrared 'RED': image.select('red'), // Red 'BLUE': image.select('blue') // Blue }).rename('EVI').multiply(10000); return image.addBands(evi); }; ``` --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares - Composiciones estacionales de EVI. ```java // Agregar EVI a la colección. var filtered_EVI = filtered.map(addEVI); print(filtered_EVI, "evi") // Crear las composiciones estacionales. var createSeasonComposites = function(months) { var startMonth = ee.List(months).get(0) var endMonth = ee.List(months).get(1) var monthFilter = ee.Filter.calendarRange(startMonth, endMonth, 'month') var seasonFiltered = filtered_EVI.select(["EVI"]).filter(monthFilter) var composite = seasonFiltered.median() return composite.clip(geometry) } var compositeList = cropCalendar.map(createSeasonComposites) // compo estacional EVI print(compositeList, "compo EVI estacional 2022") ``` --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares - Composiciones estacionales de EVI. ```java // Crear objetos estacionales EVI var EVIver = ee.Image(compositeList.get(0)).rename("EVIverano") var EVIoto = ee.Image(compositeList.get(1)).rename("EVIotoño") var EVIprim = ee.Image(compositeList.get(3)).rename("EVIprimavera") // Mediana bandas espectrales 10 metros --------- var median_bands = filtered.median().select(['blue','green','red','nir']); ``` --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares - Modelo elevación digital. ```java // NASADEM downsample 30m - 10 metros -------------------- var dem = ee.Image("NASA/NASADEM_HGT/001").clip(geometry).select("elevation") var dem_res = dem.select("elevation") // Transformar DEM de 30 metros a 10 metros. var res_dem_10m = dem_res.resample('bilinear') // metodo de resampling .reproject({ crs: dem_res.projection(), // projección (CRS) scale:10 // escala espacial }) print(res_dem_10m.projection().nominalScale(), "resolucion 10 metros") print(dem.projection().nominalScale(), "resolucion 30 metros") ``` --- ```java var pend = ee.Terrain.slope(dem); var orien = ee.Terrain.aspect(dem); var topofinal = dem.addBands(pend).addBands(orien); print(topofinal, "variable elevacion y orientacion") Map.addLayer(topofinal,{}, "Topografia") ``` <center> <img src="data:image/png;base64,#dem.PNG" width="1000px" HEIGHT = "400px"/> <center> --- ### Preparar las imágenes para la clasificación. #### b) variables auxiliares - Agregar todos los predictores en un stack. ```java // Predictores clasificacion supervisada. bandas a 10 metros. var composite_pred = median_bands.addBands(EVIver) .addBands(EVIoto) .addBands(EVIprim) .addBands(topofinal) print(composite_pred, "composite predictores") var visparams = { bands: ["red", "green", "blue"], min: 0, max: 2000, gamma: 1.2 } Map.addLayer(composite_pred.clip(AOI),visparams, 'RGB bandas'); ``` --- ### Preparar las imágenes para la clasificación. #### c) Normalizar la información. - Cuando trabajamos con múltiples predictores, es posible que las unides de estos sean muy diferentes entre sí. - Para esto es necesario normalizar la información entre 0-1 a fin de trabajar la misma escala de información y no alterar el desempeño del modelo. --- ### Preparar las imágenes para la clasificación. #### c) Normalizar la información. ```java function normalize(image){ var bandNames = image.bandNames(); // Compute min and max of the image var minDict = image.reduceRegion({ reducer: ee.Reducer.min(), geometry: geometry, scale: 10, maxPixels: 1e9 }); var maxDict = image.reduceRegion({ reducer: ee.Reducer.max(), geometry: geometry, scale: 10, maxPixels: 1e9 }); var mins = ee.Image.constant(minDict.values(bandNames)); var maxs = ee.Image.constant(maxDict.values(bandNames)); var normalized = image.subtract(mins).divide(maxs.subtract(mins)); return normalized; } ``` --- ### Métodos de clasificación disponibles en GEE. .pull-left[ #### a) Supor vector machine. (SVM) - SVM fue introducido por Vladimir Vapnik en 1992 a partir de un modelo kernel de "machine learning" para efectos de clasificaciones y regresiones. - Es un clasificador ampliamente utilizado el cual es capaz de producir buenos resultados a partir de una baja cantidad de muestras de entrenamiento. - Divide el "hiperplano" en diferentes segmentos permitiendo clasificar las muestras que estén agrupadas entre sí. - Enlace video explicativo de como separa el hiperplano: https://youtu.be/3liCbRZPrZA ] .pull-right[ <right> <img src="data:image/png;base64,#svm.jpg.PNG" width="350px" HEIGHT = "500px"/> <right> ] --- ### Métodos de clasificación disponibles en GEE. .pull-left[ #### b) Random Forest. - Clasificador de machine learning el cual ajusta un "bosque de decisiones" a subconjuntos cambiantes de los datos de entrenamiento. - En cada nodo o división se prueba un subconjunto aleatorio (bootstraping) de variables predictoras seleccionando de modo que cada subconjunto para cada árbol es independiente y único. - La decisión resultante de cada nodo o árbol será comparada con el resultado de los demás arboles de decisión hasta encontrar el resultado que más se repita dentro del píxel. ] .pull-right[  ] --- <center> <img src="data:image/png;base64,#RF.gif" width="1000px" HEIGHT = "550px"/> <center> <center> TensorFlow 2021 <center> --- ### Clasificación por Random Forest. ```java // Clases uso de suelo Aconcagua: var bare = suelo_des; // Feature.collection de suelo desnudo var water = agua; // Feature.collection de agua var forest = bosque; // Feature.collection de bosque var agriculture = agricultura; // Feature.collection de agricultura var shrub = matorral; // Feature.collection de Matorral // Unir los puntos en un solo elemento. var gcps = bare.merge(water).merge(forest).merge(agriculture).merge(shrub); ``` --- ### Clasificación por Random Forest. - Mis puntos deben ser separados de forma aleatoria en un conjunto de entrenamiento y validación del modelo, para esto se suele considerar el <b>70% para entrenar</b> y el <b>30% de los puntos restantes para validar</b>. ```java // Añadir una columna a mi objeto para la separacion aleatoria. var gcp = gcps.randomColumn(); // 70% de las muestras para entrenar. // 30% restante para validar. var trainingGcp = gcp.filter(ee.Filter.lt('random', 0.7)); // var validationGcp = gcp.filter(ee.Filter.gte('random', 0.7)); ee.Filter.gte, greater_than print(trainingGcp, "puntos entrenamiento") print(validationGcp, "puntos validacion") ``` - la función <b style = 'color : #EE00EE;'> ee.Filter.lt() y ee.Filter.gte()</b> nos permite filtrar a partir de alguna condición especifica, siendo la primera un filtro considerando el 70% de los datos o menos, mientras que el segundo un filtro considerando el 30% restante. --- ### Clasificación por Random Forest. - Extraer la informacion contenida en las capas rasters (predictores) a los 2 grupos de muestras. ```java // Superponer los puntos sobre los predictores para extraer la información. var training = composite.sampleRegions({ collection: trainingGcp, properties: ['class'], tileScale: 16, scale: 10 }); print(training, "puntos ent") ``` - la función <b style = 'color : #EE00EE;'>.sampleRegions()</b> nos permite extraer los datos de un pixel (punto) o múltiples pixeles (polígono) indicando la <b> collection </b> o geometría, las propiedades, la escala espacial entre otros elementos. --- ### Clasificación por Random Forest. #### Entrenar el modelo de RandomForest. ```java var classifier = ee.Classifier.smileRandomForest(200).train({ // 200 árboles de decisión features: training, // puntos de entrenamiento classProperty: 'class', // propiedad "class" identificador de cada clase inputProperties: composite.bandNames() // nombre de los predictores }); print(classifier, "modelo RF clasificacion"); // Resultado del modelo RandomForest // Clasificar mi stack de predictores a partir del modelo. var classified = composite.classify(classifier).clip(geometry); print(classified, "clasificacion supervisada RF"); // Crear una paleta de 5 colores (1 color por clase) // Colores deben estar asignados en el orden del valor de las clases // agua - bosque - matorral - agrícola - suelo desnudo var palette = ["#00BFFF", "#008B00", "#A2CD5A", "#CD4F39", "#EEE8CD"]; Map.addLayer(classified, {min: 1, max: 5, palette: palette}, "clasificada 2019"); ``` --- ### Clasificación por Random Forest. #### Entrenar el modelo de RandomForest. - <b style = 'color : #EE00EE;'>.smileRandomForest()</b> aplicar modelo de RF con n cantidad de arboles. - <b style = 'color : #EE00EE;'>.train()</b> entrena un modelo según el metodo seleccionado. - <b style = 'color : #EE00EE;'>.bandNames()</b> obtener los nombres de las bandas. - <b style = 'color : #EE00EE;'>.classify()</b> aplica una clasificación a partir de un modelo ya entrenado. --- <center> <img src="data:image/png;base64,#clasificacion_2.JPG" width="850px" HEIGHT = "530px"/> <center> --- ### Análisis de los resultados. - Precisión general – índice Kappa - Errores comisión y omisión ```java var test = classified.sampleRegions({ collection: validationGcp, properties: ['class'], tileScale: 16, scale: 10, }); var testConfusionMatrix = test.errorMatrix('class', 'classification') print('Matriz de confusion', testConfusionMatrix); // Matriz de confusión print('Precision general', testConfusionMatrix.accuracy()); // Precisión general clasificación print('Indice Kappa', testConfusionMatrix.kappa()); // Indice Kappa clasificación print('Precision productor', testConfusionMatrix.producersAccuracy()); // Precisión productor print('consumer accuracy', testConfusionMatrix.consumersAccuracy()); // Precisión consumidor ``` - Comparar la información independiente que no fue utilizada en el modelo (realidad) con el resultado de mi clasificación (modelo). - <b style = 'color : #EE00EE;'>.errorMatrix()</b> crea una matriz de confusión a partir de las clases contenidas en los puntos de validación y el resultado de mi clasificación (mapa resultante) --- ### Análisis de los resultados. ```java // Exportar el resultado al drive: Export.image.toDrive({ image: classified, description: "LULC_2022_Aconcagua", folder: "GEE", scale: 10, crs: "EPSG:32719" }) // Exportar el resultado a la nube: Export.image.toAsset({ image: classified, description: 'Clasificacion_sup_Aconcagua', assetId: 'Clasificacion_sup', region: geometry, scale: 30, crs: 'EPSG:32719' }) ``` --- ### Aplicaciones de una clasificación supervisada. <center> <img src="data:image/png;base64,#mapa_2.JPG" width="900px" HEIGHT = "530px"/> <center> --- ### Bibliografía. Wegmann M., Leutner B., Dech S. (2016) Remote Sensing and GIS for Ecologists Using Open Source Software. Ed. Pelagic Zhao, Y., Feng, D., Yu, L., Wang, X., Chen, Y., Bai, Y., Hernández Palma, H., Galleguillos Torres, M., Estades Marfán, C., Biging, G., Radke, J. y Gong, P. (2016). Detailed dynamic land cover mapping of Chile: Accuracy improvement by integrating multi-temporal data. Disponible en https://repositorio.uchile.cl/handle/2250/142288. Zanaga, D., Van De Kerchove, R., De Keersmaecker, W., Souverijns, N., Brockmann, C., Quast, R., Wevers, J., Grosu, A., Paccini, A., Vergnaud, S., Cartus, O., Santoro, M., Fritz, S., Georgieva, I., Lesiv, M., Carter, S., Herold, M., Li, L., Tsendbazar, N.-E., … Arino, O. (2021). ESA WorldCover 10 m 2020 v100 (Versión v100) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.5571936. Dubertret, F., Tourneau, F. M. Le, Villarreal, M. L., & Norman, L. M. (2022). Monitoring Annual Land Use/Land Cover Change in the Tucson Metropolitan Area with Google Earth Engine (1986–2020). Remote Sensing, 14(9). https://doi.org/10.3390/rs14092127. Cervantes, J., Garcia-Lamont, F., Rodríguez-Mazahua, L., & Lopez, A. (2020). A comprehensive survey on support vector machine classification: Applications, challenges and trends. Neurocomputing, 408, 189–215. https://doi.org/10.1016/j.neucom.2019.10.118. --- ### Bibliografía. García-Álvarez, D., Teresa Camacho Olmedo, M., Paegelow, M., & François Mas, J. (n.d.). Validation Practices with QGIS Land Use Cover Datasets and Validation Tools. Montero, D., Aybar, C., Mahecha, M. D., & Wieneke, S. (2022). SPECTRAL: AWESOME SPECTRAL INDICES DEPLOYED VIA THE GOOGLE EARTH ENGINE JAVASCRIPT API. International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences - ISPRS Archives, 48(4/W1-2022), 301–306. https://doi.org/10.5194/isprs-archives-XLVIII-4-W1-2022-301-2022 Poortinga, A., Tenneson, K., Shapiro, A., Nquyen, Q., Aung, K. S., Chishtie, F., & Saah, D. (2019). Mapping plantations in Myanmar by fusing Landsat-8, Sentinel-2 and Sentinel-1 data along with systematic error quantification. Remote Sensing, 11(7). https://doi.org/10.3390/rs11070831 Rasul, A., Balzter, H., Ibrahim, G., Hameed, H., Wheeler, J., Adamu, B., Ibrahim, S., & Najmaddin, P. (2018). Applying Built-Up and Bare-Soil Indices from Landsat 8 to Cities in Dry Climates. Land, 7(3), 81. https://doi.org/10.3390/land7030081 Shetty, S., Gupta, P. K., Belgiu, M., & Srivastav, S. K. (2021). Assessing the effect of training sampling design on the performance of machine learning classifiers for land cover mapping using multi-temporal remote sensing data and google earth engine. Remote Sensing, 13(8). https://doi.org/10.3390/rs13081433 --- class: inverse middle 